package com.hqyj.javaSpringBoot.modules.test.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hqyj.javaSpringBoot.modules.common.entity.AbstractEntity;

import javax.persistence.*;

@Entity
@Table(name="test_card")
public class Card extends AbstractEntity {
    //@Column批注的length属性指定数据库列的大小
    @Column(length=50)
    private String cardNo;

    /**
     * OneToOne：一对一关系中，有外键方使用 JoinColumn 注解，另一方使用 mappedBy 属性（可选）
     * cascade：联级操作
     * fetch：加载数据策略
     * JsonIgnore：不序列化该字段，避免无限递归
     */
    //mappedBy属性用于双向关联实体
    // cascade属性表示与此实体一对一关联的实体的联级样式类型：如级联新建、删除、刷新、更新 CascadeType.ALL代表以上四种都支持
   //fetch属性是该实体的加载方式
            //FetchType.EAGER：急加载，加载一个实体时，定义急加载的属性会立即从数据库中加载。
            //FetchType.LAZY：懒加载，加载一个实体时，定义懒加载的属性不会马上从数据库中加载。
    //@JsonIgnore:在json序列化时将pojo中的一些属性忽略掉，标记在属性或者方法上，返回的json数据即不包含该属性
    @OneToOne(mappedBy = "studentCard", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JsonIgnore
    private Student student;


    public String getCardNo() {
        return cardNo;
    }

    public void setCardNo(String cardNo) {
        this.cardNo = cardNo;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }
}